本系列文章中所有的設定與範例程式碼都可以在 Github 上的範例專案 zkquickstart 找到,有些細節就交給原始碼來說明更清楚。
在使用 zk 開發時,我推薦大家一個可以快速啟動、驗證結果的環境設定。本章節我只使用我熟悉的 Maven, Intellij IDEA 示範,使用其他工具的人,只要了解原理,你應該可以在你熟悉的工具找到對應的設定方法。
這個免費的 JDK 可以自動偵測 java class 的變動,然後自動重新載入新編譯過的 class 檔到 JVM,在開發過可以省去重啟 java 應用程式伺服器,減少等待時間。
在 IntelliJ IDEA 中設定 Maven Runner 加上參數:
-XX:HotswapAgent=core
設定完後,需要以 debug 模式啟動伺服器。每次我在 IntelliJ 中修改 Java 程式碼、重新編譯 java 檔後(cmd+shift+F9),我就可以看到以下訊息:
代表新的 class 已經已經被載入 JVM,我只要重載頁面就可以執行新的程式碼,相當方便不用忙著重啟。
撰寫 zul 完後最需要的是看到瀏覽器繪製的頁面結果,如果這時候你需要打包、部署、啟動應用程式伺服器的話,這個程序做個10 次就會覺得很煩了,而且也很耗時。推薦各位使用 maven jetty plugin,優點是啟動速度快,無需打包、部署程序,直接讀取既有的 maven 專案目錄中的檔案來運作應用程式,很適合作為開發時期的輕量應用程式伺服器,可以縮短「修改、測試」每個迭代時間。
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.43.v20210629</version>
</plugin>
</plugins>
</build>
在 pom.xml 中設定完後,要在 intelliJ 中設定 run configuration,設定 goal 為:
jetty:run
啟動 jetty 後,如果是範例專案,訪問網址
http://localhost:8080/zkquickstart/
就可以看到範例專案首頁
結合以上兩個設定,每次修改 java 或是 zul 你都不需要重啟伺服器,即便遇到有少數 hotswap 不能自動載入 class 的情形,重啟伺服器的時間也只需幾秒鐘。
因為 ZK jar 都內含 web-fragment.xml,其中已經包含必要的 ZK 設定,使用支援 web fragment 的伺服器可以省去在 web.xml 設定 ZK servlet等的步驟。如需要手動設定請參考 web.xml for Servlet 2.4。